#ifndef _KEY_CODE_H_
#define _KEY_CODE_H_

#include "common/common.h"

#ifdef UENGINE_INPUTSYSTEM_AGENT_SDL

enum class EKeyCode
{
    _0 = SDL_SCANCODE_0,
    _1 = SDL_SCANCODE_1,
    _2 = SDL_SCANCODE_2,
    _3 = SDL_SCANCODE_3,
    _4 = SDL_SCANCODE_4,
    _5 = SDL_SCANCODE_5,
    _6 = SDL_SCANCODE_6,
    _7 = SDL_SCANCODE_7,
    _8 = SDL_SCANCODE_8,
    _9 = SDL_SCANCODE_9,

    //
    A = SDL_SCANCODE_A,
    B = SDL_SCANCODE_B,
    C = SDL_SCANCODE_C,
    D = SDL_SCANCODE_D,
    E = SDL_SCANCODE_E,
    F = SDL_SCANCODE_F,
    G = SDL_SCANCODE_G,
    H = SDL_SCANCODE_H,
    I = SDL_SCANCODE_I,
    J = SDL_SCANCODE_J,
    K = SDL_SCANCODE_K,
    L = SDL_SCANCODE_L,
    M = SDL_SCANCODE_M,
    N = SDL_SCANCODE_N,
    O = SDL_SCANCODE_O,
    P = SDL_SCANCODE_P,
    Q = SDL_SCANCODE_Q,
    R = SDL_SCANCODE_R,
    S = SDL_SCANCODE_S,
    T = SDL_SCANCODE_T,
    U = SDL_SCANCODE_U,
    V = SDL_SCANCODE_V,
    W = SDL_SCANCODE_W,
    X = SDL_SCANCODE_X,
    Y = SDL_SCANCODE_Y,
    Z = SDL_SCANCODE_Z,

    //
    ESC = SDL_SCANCODE_ESCAPE,
};

#else

enum class EKeyCode
{
    _0 = SDLK_0,
    _1 = SDLK_1,
    _2 = SDLK_2,
    _3 = SDLK_3,
    _4 = SDLK_4,
    _5 = SDLK_5,
    _6 = SDLK_6,
    _7 = SDLK_7,
    _8 = SDLK_8,
    _9 = SDLK_9,

    //
    A = SDLK_a,
    B = SDLK_b,
    C = SDLK_c,
    D = SDLK_d,
    E = SDLK_e,
    F = SDLK_f,
    G = SDLK_g,
    H = SDLK_h,
    I = SDLK_i,
    J = SDLK_j,
    K = SDLK_k,
    L = SDLK_l,
    M = SDLK_m,
    N = SDLK_n,
    O = SDLK_o,
    P = SDLK_p,
    Q = SDLK_q,
    R = SDLK_r,
    S = SDLK_s,
    T = SDLK_t,
    U = SDLK_u,
    V = SDLK_v,
    W = SDLK_w,
    X = SDLK_x,
    Y = SDLK_y,
    Z = SDLK_z,

    F1 = SDLK_F1,
    F2 = SDLK_F2,
    F3 = SDLK_F3,
    F4 = SDLK_F4,
    F5 = SDLK_F5,
    F6 = SDLK_F6,
    F7 = SDLK_F7,
    F8 = SDLK_F8,
    F9 = SDLK_F9,
    F10 = SDLK_F10,
    F11 = SDLK_F11,
    F12 = SDLK_F12,

    //
    Escape = SDLK_ESCAPE,
    Wave = SDLK_BACKQUOTE,
    Table = SDLK_TAB,
    Capslock = SDLK_CAPSLOCK,
    LShift = SDLK_LSHIFT,
    LCtrl = SDLK_LCTRL,
    LAlt = SDLK_LALT,
    Space = SDLK_SPACE,
    RAlt = SDLK_RALT,
    RCtrl = SDLK_RCTRL,
    Left = SDLK_LEFT,
    Down = SDLK_DOWN,
    Right = SDLK_RIGHT,
    Up = SDLK_UP,
    RShift = SDLK_RSHIFT,
    Enter = SDLK_RETURN,
    BackSlash = SDLK_BACKSLASH,
    Backspace = SDLK_BACKSPACE,
    Addition = SDLK_PLUS,
    Subtract = SDLK_MINUS,
    RParen = SDLK_RIGHTPAREN,
    LParen = SDLK_LEFTPAREN,
    Multiply = SDLK_ASTERISK,
    And = SDLK_AMPERSAND,
    Craet = SDLK_CARET,
    Percent = SDLK_PERCENT,
    Dollar = SDLK_DOLLAR,
    Sharp = SDLK_HASH,
    At = SDLK_AT,
    Exclam = SDLK_EXCLAIM,
    Underline = SDLK_UNDERSCORE,
    Equal = SDLK_EQUALS,
    LBracket = SDLK_LEFTBRACKET,
    RBracket = SDLK_RIGHTBRACKET,
    Semicolon = SDLK_SEMICOLON,
    Quote = SDLK_QUOTE,
    Comma = SDLK_COMMA,
    Dot = SDLK_PERIOD,
    Slash = SDLK_SLASH,
    Colon = SDLK_COLON,
    DoubleQuote = SDLK_QUOTEDBL,
    Less = SDLK_LESS,
    Greate = SDLK_GREATER,
    Question = SDLK_QUESTION,

    //
    Insert = SDLK_INSERT,
    Delete = SDLK_DELETE,
    PageUp = SDLK_PAGEUP,
    PageDown = SDLK_PAGEDOWN,
    Home = SDLK_HOME,
    End = SDLK_END,
    Pause = SDLK_PAUSE,
    Scrolllock = SDLK_SCROLLLOCK,
    Printscreen = SDLK_PRINTSCREEN,

    //
    Numlock = SDLK_NUMLOCKCLEAR,
    NumAdd = SDLK_KP_PLUS,
    NumSub = SDLK_KP_MINUS,
    NumMul = SDLK_KP_MULTIPLY,
    NumDiv = SDLK_KP_DIVIDE,
    NumEnter = SDLK_KP_ENTER,
    NumDot = SDLK_KP_PERIOD,
    Num0 = SDLK_KP_0,
    Num1 = SDLK_KP_1,
    Num2 = SDLK_KP_2,
    Num3 = SDLK_KP_3,
    Num4 = SDLK_KP_4,
    Num5 = SDLK_KP_5,
    Num6 = SDLK_KP_6,
    Num7 = SDLK_KP_7,
    Num8 = SDLK_KP_8,
    Num9 = SDLK_KP_9,

};
#endif

enum class EMouseButton
{
    Unknown,
    Left,
    Middle,
    Right
};

#endif